

\documentclass[a4paper,conference]{IEEEtran}
% Add the compsoc option for Computer Society conferences.
%
% If IEEEtran.cls has not been installed into the LaTeX system files,
% manually specify the path to it like:
% \documentclass[conference]{../sty/IEEEtran}



% Some very useful LaTeX packages include:
% (uncomment the ones you want to load)


% *** MISC UTILITY PACKAGES ***
%
%\usepackage{ifpdf}
% Heiko Oberdiek's ifpdf.sty is very useful if you need conditional
% compilation based on whether the output is pdf or dvi.
% usage:
% \ifpdf
%   % pdf code
% \else
%   % dvi code
% \fi
% The latest version of ifpdf.sty can be obtained from:
% http://www.ctan.org/tex-archive/macros/latex/contrib/oberdiek/
% Also, note that IEEEtran.cls V1.7 and later provides a builtin
% \ifCLASSINFOpdf conditional that works the same way.
% When switching from latex to pdflatex and vice-versa, the compiler may
% have to be run twice to clear warning/error messages.






% *** CITATION PACKAGES ***
%
%\usepackage{cite}
% cite.sty was written by Donald Arseneau
% V1.6 and later of IEEEtran pre-defines the format of the cite.sty package
% \cite{} output to follow that of IEEE. Loading the cite package will
% result in citation numbers being automatically sorted and properly
% "compressed/ranged". e.g., [1], [9], [2], [7], [5], [6] without using
% cite.sty will become [1], [2], [5]--[7], [9] using cite.sty. cite.sty's
% \cite will automatically add leading space, if needed. Use cite.sty's
% noadjust option (cite.sty V3.8 and later) if you want to turn this off.
% cite.sty is already installed on most LaTeX systems. Be sure and use
% version 4.0 (2003-05-27) and later if using hyperref.sty. cite.sty does
% not currently provide for hyperlinked citations.
% The latest version can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/cite/
% The documentation is contained in the cite.sty file itself.






% *** GRAPHICS RELATED PACKAGES ***
%
\ifCLASSINFOpdf
\usepackage[pdftex]{graphicx}
  % declare the path(s) where your graphic files are
  % \graphicspath{{../pdf/}{../jpeg/}}
  % and their extensions so you won't have to specify these with
  % every instance of \includegraphics
  % \DeclareGraphicsExtensions{.pdf,.jpeg,.png}
\else
  % or other class option (dvipsone, dvipdf, if not using dvips). graphicx
  % will default to the driver specified in the system graphics.cfg if no
  % driver is specified.
\usepackage[dvips]{graphicx}
  % declare the path(s) where your graphic files are
  % \graphicspath{{../eps/}}
  % and their extensions so you won't have to specify these with
  % every instance of \includegraphics
  % \DeclareGraphicsExtensions{.eps}
\fi
% graphicx was written by David Carlisle and Sebastian Rahtz. It is
% required if you want graphics, photos, etc. graphicx.sty is already
% installed on most LaTeX systems. The latest version and documentation can
% be obtained at: 
% http://www.ctan.org/tex-archive/macros/latex/required/graphics/
% Another good source of documentation is "Using Imported Graphics in
% LaTeX2e" by Keith Reckdahl which can be found as epslatex.ps or
% epslatex.pdf at: http://www.ctan.org/tex-archive/info/
%
% latex, and pdflatex in dvi mode, support graphics in encapsulated
% postscript (.eps) format. pdflatex in pdf mode supports graphics
% in .pdf, .jpeg, .png and .mps (metapost) formats. Users should ensure
% that all non-photo figures use a vector format (.eps, .pdf, .mps) and
% not a bitmapped formats (.jpeg, .png). IEEE frowns on bitmapped formats
% which can result in "jaggedy"/blurry rendering of lines and letters as
% well as large increases in file sizes.
%
% You can find documentation about the pdfTeX application at:
% http://www.tug.org/applications/pdftex





% *** MATH PACKAGES ***
%
%\usepackage[cmex10]{amsmath}
% A popular package from the American Mathematical Society that provides
% many useful and powerful commands for dealing with mathematics. If using
% it, be sure to load this package with the cmex10 option to ensure that
% only type 1 fonts will utilized at all point sizes. Without this option,
% it is possible that some math symbols, particularly those within
% footnotes, will be rendered in bitmap form which will result in a
% document that can not be IEEE Xplore compliant!
%
% Also, note that the amsmath package sets \interdisplaylinepenalty to 10000
% thus preventing page breaks from occurring within multiline equations. Use:
%\interdisplaylinepenalty=2500
% after loading amsmath to restore such page breaks as IEEEtran.cls normally
% does. amsmath.sty is already installed on most LaTeX systems. The latest
% version and documentation can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/required/amslatex/math/





% *** SPECIALIZED LIST PACKAGES ***
%
%\usepackage{algorithmic}
% algorithmic.sty was written by Peter Williams and Rogerio Brito.
% This package provides an algorithmic environment fo describing algorithms.
% You can use the algorithmic environment in-text or within a figure
% environment to provide for a floating algorithm. Do NOT use the algorithm
% floating environment provided by algorithm.sty (by the same authors) or
% algorithm2e.sty (by Christophe Fiorio) as IEEE does not use dedicated
% algorithm float types and packages that provide these will not provide
% correct IEEE style captions. The latest version and documentation of
% algorithmic.sty can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/algorithms/
% There is also a support site at:
% http://algorithms.berlios.de/index.html
% Also of interest may be the (relatively newer and more customizable)
% algorithmicx.sty package by Szasz Janos:
% http://www.ctan.org/tex-archive/macros/latex/contrib/algorithmicx/




% *** ALIGNMENT PACKAGES ***
%
%\usepackage{array}
% Frank Mittelbach's and David Carlisle's array.sty patches and improves
% the standard LaTeX2e array and tabular environments to provide better
% appearance and additional user controls. As the default LaTeX2e table
% generation code is lacking to the point of almost being broken with
% respect to the quality of the end results, all users are strongly
% advised to use an enhanced (at the very least that provided by array.sty)
% set of table tools. array.sty is already installed on most systems. The
% latest version and documentation can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/required/tools/


%\usepackage{mdwmath}
%\usepackage{mdwtab}
% Also highly recommended is Mark Wooding's extremely powerful MDW tools,
% especially mdwmath.sty and mdwtab.sty which are used to format equations
% and tables, respectively. The MDWtools set is already installed on most
% LaTeX systems. The lastest version and documentation is available at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/mdwtools/


% IEEEtran contains the IEEEeqnarray family of commands that can be used to
% generate multiline equations as well as matrices, tables, etc., of high
% quality.


%\usepackage{eqparbox}
% Also of notable interest is Scott Pakin's eqparbox package for creating
% (automatically sized) equal width boxes - aka "natural width parboxes".
% Available at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/eqparbox/





% *** SUBFIGURE PACKAGES ***
%\usepackage[tight,footnotesize]{subfigure}
% subfigure.sty was written by Steven Douglas Cochran. This package makes it
% easy to put subfigures in your figures. e.g., "Figure 1a and 1b". For IEEE
% work, it is a good idea to load it with the tight package option to reduce
% the amount of white space around the subfigures. subfigure.sty is already
% installed on most LaTeX systems. The latest version and documentation can
% be obtained at:
% http://www.ctan.org/tex-archive/obsolete/macros/latex/contrib/subfigure/
% subfigure.sty has been superceeded by subfig.sty.



%\usepackage[caption=false]{caption}
%\usepackage[font=footnotesize]{subfig}
% subfig.sty, also written by Steven Douglas Cochran, is the modern
% replacement for subfigure.sty. However, subfig.sty requires and
% automatically loads Axel Sommerfeldt's caption.sty which will override
% IEEEtran.cls handling of captions and this will result in nonIEEE style
% figure/table captions. To prevent this problem, be sure and preload
% caption.sty with its "caption=false" package option. This is will preserve
% IEEEtran.cls handing of captions. Version 1.3 (2005/06/28) and later 
% (recommended due to many improvements over 1.2) of subfig.sty supports
% the caption=false option directly:
%\usepackage[caption=false,font=footnotesize]{subfig}
%
% The latest version and documentation can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/subfig/
% The latest version and documentation of caption.sty can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/caption/




% *** FLOAT PACKAGES ***
%
%\usepackage{fixltx2e}
% fixltx2e, the successor to the earlier fix2col.sty, was written by
% Frank Mittelbach and David Carlisle. This package corrects a few problems
% in the LaTeX2e kernel, the most notable of which is that in current
% LaTeX2e releases, the ordering of single and double column floats is not
% guaranteed to be preserved. Thus, an unpatched LaTeX2e can allow a
% single column figure to be placed prior to an earlier double column
% figure. The latest version and documentation can be found at:
% http://www.ctan.org/tex-archive/macros/latex/base/



%\usepackage{stfloats}
% stfloats.sty was written by Sigitas Tolusis. This package gives LaTeX2e
% the ability to do double column floats at the bottom of the page as well
% as the top. (e.g., "\begin{figure*}[!b]" is not normally possible in
% LaTeX2e). It also provides a command:
%\fnbelowfloat
% to enable the placement of footnotes below bottom floats (the standard
% LaTeX2e kernel puts them above bottom floats). This is an invasive package
% which rewrites many portions of the LaTeX2e float routines. It may not work
% with other packages that modify the LaTeX2e float routines. The latest
% version and documentation can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/sttools/
% Documentation is contained in the stfloats.sty comments as well as in the
% presfull.pdf file. Do not use the stfloats baselinefloat ability as IEEE
% does not allow \baselineskip to stretch. Authors submitting work to the
% IEEE should note that IEEE rarely uses double column equations and
% that authors should try to avoid such use. Do not be tempted to use the
% cuted.sty or midfloat.sty packages (also by Sigitas Tolusis) as IEEE does
% not format its papers in such ways.





% *** PDF, URL AND HYPERLINK PACKAGES ***
%
%\usepackage{url}
% url.sty was written by Donald Arseneau. It provides better support for
% handling and breaking URLs. url.sty is already installed on most LaTeX
% systems. The latest version can be obtained at:
% http://www.ctan.org/tex-archive/macros/latex/contrib/misc/
% Read the url.sty source comments for usage information. Basically,
% \url{my_url_here}.





% *** Do not adjust lengths that control margins, column widths, etc. ***
% *** Do not use packages that alter fonts (such as pslatex).         ***
% There should be no need to do such things with IEEEtran.cls V1.6 and later.
% (Unless specifically asked to do so by the journal or conference you plan
% to submit to, of course. )


% correct bad hyphenation here
\hyphenation{op-tical krá-va ko-kot}

\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}

\usepackage{pdflscape}

\begin{document}
\title{Projekt Kreslítko \\X36ASS}


% author names and affiliations
\author{
\IEEEauthorblockN{Petr Diviš\\ a Zdeněk Papež}
\IEEEauthorblockA{ČVUT FEL\\
Praha, listopad 2010\\
divispe2@fel.cvut.cz, papezzde@fel.cvut.cz}}

% conference papers do not typically use \thanks and this command
% is locked out in conference mode. If really needed, such as for
% the acknowledgment of grants, issue a \IEEEoverridecommandlockouts
% after \documentclass


% use for special paper notices
%\IEEEspecialpapernotice{(Invited Paper)}




% make the title area
\maketitle


\begin{abstract}
%\boldmath
Tato zpráva popisuje návrh, vývoj a porovnání dvou softwarových architektur pro předmět X36ASS na FEL ČVUT. Byly použity architektury MVC (Model-View-Controller) a PAC (Presentation-Abstraction-Control) na aplikaci jednoduchého grafického editoru. Aplikace byla v obou případech vyvinuta jako stand-alone aplikace v Javě.
\par
Projektový repozitář je k nalezení na adrese \texttt{http://code.google.com/p/ass-kreslitko/}.


\end{abstract}
% IEEEtran.cls defaults to using nonbold math in the Abstract.
% This preserves the distinction between vectors and scalars. However,
% if the conference you are submitting to favors bold math in the abstract,
% then you can use LaTeX's standard command \boldmath at the very start
% of the abstract to achieve this. Many IEEE journals/conferences frown on
% math in the abstract anyway.

% no keywords




% For peer review papers, you can put extra information on the cover
% page as needed:
% \ifCLASSOPTIONpeerreview
% \begin{center} \bfseries EDICS Category: 3-BBND \end{center}
% \fi
%
% For peerreview papers, this IEEEtran command inserts a page break and
% creates the second title. It will be ignored for other modes.
\IEEEpeerreviewmaketitle



\section{Úvod}
Jako problém, na který byly obě architektury implementovány, byl zvolen jednoduchý grafický editor. Hlavními funkčními požadavky na editor byly: vytváření a editace základních geometrických tvarů, možnost jejich seskupování a změna jejich pořadí v ose $Z$. Požadavky jsou zachyceny v use case diagramu (viz obrázek \ref{use_case}). Editor byl zvolen jako stand-alone aplikace v jazyce Java.

\section{Návrh}

\subsection{Scénáře}
Základní uživatelská interakce je popsána následujícími scénáři.


\begin{figure*}[hbt]
\centering
\includegraphics[width=2in]{images/use_case.png}
\caption{Use Case Diagram}
\label{use_case}
\end{figure*}

\subsection*{Editace objektu}
\par
\textit{Cíl případu užití:}\\
Přesunout jeden objekt a zvětšit jeho velikost a jiný tvar odstranit.
\par
\textit{Aktéři: }
\begin{enumerate}
\item uživatel
\item systém
\end{enumerate}

\par
\textit{Vstupní podmínky:}\\
Na ploše je již vytvořeno několik objektů.
\par
\textit{Výstupní podmínky:}\\
První objekt je přemístěn a zvětšen, druhý objekt je odstraněn.
\par
\textit{Základní scénář:}
\begin{enumerate}
\item 
Uživatel na ploše vybere objekt
\item
Systém vybraný objekt zvýrazní
\item 
Uživatel objekt přesune
\item 
Systém objekt umístí na nové místo
\item 
Uživatel změní velikost objektu
\item 
Systém změní velikost objektu
\item 
Uživatel zruší označení
\item
Systém vybraný objekt znevýrazní
\item 
Uživatel vybere objekt
\item
Systém vybraný objekt zvýrazní
\item 
Uživatel smaže označený objekt
\item
Systém objekt odstraní z kreslící plochy
\end{enumerate}


\subsection*{Seskupování objektů}
\par
\textit{Cíl případu užití:}\\
Vytvoření nové skupiny objektů, změna její velikosti a pozice. Odstranění existující skupiny objektů.
\par
\textit{Aktéři:} 
\begin{enumerate}
\item uživatel
\item systém
\end{enumerate}

\par
\textit{Vstupní podmínky:}\\
Na ploše je již vytvořeno několik objektů, některé z nich ve skupině.
\par
\textit{Výstupní podmínky:}\\
Několik objektů je seskupeno, přesunuto a jejich velikost je změněna. Zvolená skupina objektů je odstraněna.
\par
\textit{Základní scénář:}
\begin{enumerate}
\item 
Uživatel na ploše vybere několik objektů
\item 
Systém jednotlivé objekty zvýrazňuje
\item 
Uživatel z označených objektů vytvoří novou skupinu objektů
\item 
Systém zvýrazní skupinu jako celek
\item 
Uživatel skupinu objektů přesune
\item 
Systém změní pozici všech objektů ve skupině
\item 
Uživatel změní velikost skupiny objektů
\item 
Systém změní velikost skupiny jako celku
\item 
Uživatel zruší označení 
\item
Systém skupinu znevýrazní
\item 
Uživatel vybere skupinu objektů
\item 
Systém zvýrazní celou skupinu jako celek
\item 
Uživatel smaže označenou skupinu objektů
\item
Systém skupinu odstraní z kreslící plochy
\end{enumerate}


\subsection{Funkční požadavky}
\begin{enumerate}
\item Tvorba a editace základních geometrických objektů
\par Program zvládne vytvořit několik typů geometrických obrazců, u kterých se může měnit jejich poloha a velikost.
\item Výběr barvy objektu
\par Program dovolí volit barvy objektů, které bude uživatel kreslit.
\item Seskupování objektů
\par Program umožní seskupovat objekty do skupin.
\item Práce s pořadím v ose Z
\par Program umožní přesouvat objekty do popředí nebo pozadí.

\end{enumerate}

\subsection{Nefunkční požadavky}

\begin{enumerate}
\item Aplikace napsaná v JAVĚ
\par Aplikace bude naprogramována v programovacím jazyku Java v obou architektonických verzích.
\item OOP s použitím MVC a PAC
\par Bude využito objektové programovací paradigma a architektonické návrhové vzory Model-View-Controller pro první verzi programu a Presenter-Abstraction-Controller pro druhou verzi programu.
\item Verze 1 - jedno okno
\par První verze bude mít jen jedno okno s panely nástrojů umístěnými uvnitř.
\item Verze 2 - více oken
\par Druhá verze bude mít více oken. Každé okno bude obsahovat jinou sadu nástrojů a okna budou navzájem spolupracovat. Okna mohou nebo nemusí být zobrazena.
\item Dobrá ovladatelnost
\par Aplikace bude dobře ovladatelná pro neznalého uživatele.
\item Aplikace bude fungovat při představení 
\par Aplikace bude dobře fungovat, když ji budeme představovat při druhé prezentaci.

\end{enumerate}




\subsection{Řešení pomocí MVC}
\subsubsection{MVC obecně}

\par Obecnou architekturu MVC ukazuje schematicky obrázek \ref{MVC_schema}. Model MVC je zaměřen na odstínění dat od uživatelské interakce a je dobře popsán například v \cite{fowler}. Vzor MVC umožňuje například navázání několika pohledů (\textit{View}) zároveň nad jedním společným modelem. V našem případě je pohledem kreslící plátno, které zobrazuje jednotlivé tvary, které mají své rozměry a souřadnice. Změna parametrů pohledu, jako jsou v našem případě změna zoomu nebo posunutí výřezu, který plátno zobrazuje, nemá žádný vliv na rozměry tvarů v modelu. V tomto případě se pouze uplatňuje zobrazovací transformace a pokud by existoval jiný pohled nad stejným modelem, ten by tímto zůstal neovlivněn.

\begin{figure}[ht]
\centering
\includegraphics[width=2in]{images/MVC_schema}
\caption{MVC Schéma\cite{wiki_mvc}}
\label{MVC_schema}
\end{figure}

\subsubsection{Naše MVC řešení}

\par Hlavní okno obsahuje panely, které mají společný \textit{model} a \textit{controller}. Panel kreslícího plátna a stavu aplikace sledují model a upravují své zobrazení v závislosti na událostech \texttt{DrawingEvent}, které se v modelu generují a rozesílají na všechny zaregistrované listenery \texttt{DrawingListener}. Screenshot výsledné aplikace je ukázán na \ref{MVC_printscreen}.

\begin{figure}[ht]
\centering
\includegraphics[width=2in]{images/MVC_printscreen}
\caption{MVC Aplikace}
\label{MVC_printscreen}
\end{figure}

\subsection{Datový model}
\par Námi navržená aplikace s architekturou MVC vznikla jako první a je postavena nad datovým modelem na obrázku \ref{Data_Model}.

\begin{landscape}
\begin{figure}[hpt]
\centering
\includegraphics[width=9in]{images/Data_Model}
\caption{Datový model}
\label{Data_Model}
\end{figure}
\end{landscape}



\subsection{Sekvenční diagram}
Na sekvenčním diagramu na obrázku \ref{mvc_sequence_diagram} je znázorněna komunikace při přidání nového tvaru kliknutím uživatele na kreslící plochu. Nejprve \textit{controller} komunikuje s modelem, aby zjistil, zda bylo kliknuto do prázdného místa (a nejedná se tedy o označení již existujícího objektu). Dalším krokem je vykonání připraveného příkazu typu \texttt{AddCommand}, který byl pro kontroler připraven panelem nástrojů. V poslední fázi je dobře patrné vykreslení tvarů pomocí vzoru \textit{Visitor} (viz volání metod \texttt{accept} a \texttt{visit}).


\begin{figure*}[ht]
\centering
\includegraphics[width=5in]{images/Add-Shape-Interaction-MVC.png}
\caption{Add Shape Interaction - MVC Sequence diagram}
\label{mvc_sequence_diagram}
\end{figure*}



\subsection{Řešení pomocí PAC}
\subsubsection{PAC obecně}

\par Aplikace je rozdělená hierarchicky na samostatné agenty (jak jsou jednotlivé moduly hierarchické struktury PAC nazývány v \cite{buschmann}). Agenti mají podobnou strukturu jako MVC, jejich části se ovšem nazývají Presentation, Abstraction a Control. Schéma architektury znázorňuje obrázek \ref{PAC-schema}. Někdy se také PAC nazývá, trochu nesprávně, "hierarchickým MVC"\cite{wiki_pac}. Příbuuznost mezi MVC a PAC vychází z přejmenování \textit{Modelu} na \textit{Abstraction}, \textit{View} na \textit{Presenter} a \textit{Controlleru} na \textit{Control}. V PAC ovšem dochází k podstatné změně - PAC striktně odděluje \textit{abstraction} od \textit{presentation}. Tyto dvě části spolu komunikují výhradně přes prostředníka, kterým je \textit{control}.

\begin{figure*}[ht]
\centering
\includegraphics[width=2in]{images/PAC-schema.png}
\caption{PAC Schéma\cite{wiki_pac}}
\label{PAC-schema}
\end{figure*}



\subsubsection{Naše PAC řešení}

\par Aplikaci tvoří samostatná okna s panely nástrojů a plochou na kreslení, obdobně jako je tomu u aplikace Gimp. Každé okno je samostatným agentem v rámci hierarchické PAC architektury. Výsledný vzhled uživatelského rozhraní našeho PAC řešení aplikace je zachycen na obrázku \ref{PAC_printscreen}.

\begin{figure*}[ht]
\centering
\includegraphics[width=6in]{images/PAC_printscreen}
\caption{PAC Aplikace}
\label{PAC_printscreen}
\end{figure*}

\par
Jednotliví agenti hierarchické struktury PAC spolu komunikují pomocí zasílání zpráv. Zprávy se posílají mezi částmi \textit{Control} jednotlivých agentů. V rámci každého agenta se podle typu (\texttt{MessageType}) příchozí zprávy (\texttt{PACMessage}) rozhoduje, jakým způsobem se bude na zprávu reagovat, jak se upraví \textit{abstraction} nebo \textit{presentation}. Důležité pro toto přeposílání zpráv jsou metody \texttt{sendMessage} a \texttt{receiveMessage} rozhraní \texttt{PACAgent}. Hierarchická PAC struktura, kterou jsme pro naši aplikaci navrhli je zobrazena v diagramu komponent na obrázku \ref{pac_component_diagram}.


\begin{figure*}[ht]
\centering
\includegraphics[width=6in]{images/PAC_component}
\caption{PAC - Component Diagram}
\label{pac_component_diagram}
\end{figure*}


\subsection{Datový model}
Struktura modelu z MVC (tedy zejména třída \texttt{Shape} a její potomci) byla převzata i do naší implementace PAC, kde byla využita v části \texttt{CanvasPresentation} agenta \textit{CanvasAgent}.



\subsection{Sekvenční diagramy}

Sekvenční diagramy pro architekturu PAC popisují přidání nového tvaru, podobně jako bylo uvedeno i pro MVC. Diagram na obrázku \ref{pac_sequence_diagram} popisuje téměř totožnou komunikaci, jež byla uvedena u MVC. Na tomto diagramu je ovšem dobře patrné striktní oddělení \textit{presentation} a \textit{control}. Dále je také patrné, že nedochází k přímé komunikaci mezi \textit{presentation} a \textit{abstraction}. Na závěr komunikace je dobré si povšimnout volání \texttt{sendMessage}, které zajistí rozšíření zprávy o aktuálním dění do zbytku stromu PAC hierarchie. Detailněji je šíření zprávy ve stromu agentů popsáno v diagramu na obrázku \ref{pac_message_sequence_diagram}. Ze sekvencí je patrné, jak se o nově přidaném tvaru dozvědí i agenti \textit{StatusAgent} a \textit{HistoryAgent}, konkrétně jejich control části \texttt{StatusBarControl} a \texttt{HistoryControl}.

\begin{figure*}[ht]
\centering
\includegraphics[width=5in]{images/Add-Shape-Interaction-PAC.png}
\caption{Add Shape Interaction PAC Sequence diagram}
\label{pac_sequence_diagram}
\end{figure*}

\begin{figure*}[ht]
\centering
\includegraphics[width=5in]{images/Add-Shape-PAC-Messages.png}
\caption{Add Shape PAC Messages Sequence diagram}
\label{pac_message_sequence_diagram}
\end{figure*}

\section{Doplnění}
\subsection{Použité návrhové vzory}

V našem projektu jsme použili následující návrhové vzory.

\subsubsection{Composite}
Strukturní vzor \textit{Composite} umožňuje práci a jednotnou manipulaci s objekty, které jsou buď atomické nebo jsou rekurzivně složené z atomických a složených objektů. Toho bylo využito pro definici různých tvarů (\texttt{Rect}, \texttt{Circle}, ...) a pro možnost jejich skládání do skupin, a také skládání skupin do skupin. Kompozitní třídou v našem návrhu je \texttt{ShapeGroup} a společnou nadtřídou je abstraktní třída \texttt{Shape}.

\subsubsection{Visitor}

Vzor chování \textit{Visitor} byl využit pro vykreslování tvarů. Díky tomuto vzoru není třeba zasahovat zásadně do bussiness části kódu po přidání nového tvaru. Tento vzor odstraňuje nutnost zjišťování, o jaký typ objektu se jedná, například pomocí \texttt{instanceof}. Použití tohoto vzoru nám navíc umožňuje snadné rozšíření, pokud bychom třeba chtěli tvary místo vykreslování na plochu exportovat v nějakém grafickém formátu do souboru. Takovéto rozšíření bychom zajistili pouhým přidáním nové třídy implementující rozhraní \texttt{Visitor}. Nový visitor by se poté sám postaral o export jednotlivých tvarů. Kromě typů tvarů v modelu by nebylo potřeba žádné další znalosti kódu.

\subsubsection{Command}

Vzor chování \textit{Command} se velmi hodil pro aplikaci příkazů nad objekty na kreslící ploše. Díky němu lze implementovat volitelně i historii příkazů a případně se vracet zpět. Funkce \textit{undo} nebyla implementována, ale při použití tohoto vzoru by se jednalo jen o přidání metody \texttt{undo}, která by pro každý zvláštní command vracela zpět věci vykonané stávající metodou \texttt{execute}.

\subsubsection{Mediator}

Vzor chování \textit{Mediator} byl velmi důležitý při návrhu druhé verze aplikace. Sloužil pro komunikaci mezi panely aplikace a posílání zpráv mezi relevantními třídami.

\subsubsection{Observer}

Vzor chování \textit{Observer} v aplikaci sleduje změny modelu a informuje třídy, kterých se změny na modelu týkají. V naší aplikaci je sledován model, u kterého se registrují třídy implementující rozhraní \texttt{DrawingListener}.

\section{Porovnání}

\subsection{Kvantitativní hodnocení}

V této části je třeba zmínit, že i když obě verze aplikace mají stejnou funkčnost, jejich mohutnost je odlišná. Vzhledem ke své modularitě je PAC mohutnější a v naší implementaci má 36 tříd. MVC verze aplikace má jen 19 tříd. To je skoro o polovinu méně. Počet tříd jde ale logicky proti rozšiřitelnosti.

\subsection{Rozšiřitelnost}

	Z hlediska rozšiřitelnosti si lze položit otázku - jak složité je přidat nový panel do každé verze aplikace?
\par MVC verze představuje složitější architekturu pro mo\-di\-fi\-kování takovýmto způsobem, protože nový panel bude pravděpodobně sledovat i upravovat model. Dále je třeba znát body napojení, a proto musíme mít znalost stávajícího modelu. V poslední řadě je nutné znát zprávy, které model observerům posílá, aby bylo možné panel připojit a zajistit jeho reakce na změny v modelu.

\par Modifikace PAC verze aplikace je jednodušší, protože hierar\-chic\-ká struktura architektury s rozšiřováním počítá. Proto je pouze nutné implementovat třídu \texttt{PACAgent}, která zajišťuje posílání a přijímání zpráv od vyšších vrstev architektury. Ještě je v naší implementaci nutné znát typy zpráv které se posílají a na ně poté \texttt{PACAgent} reaguje vlastní implementací. Sám agent si v reakci na zprávy upravuje \textit{abstraction} a případně \textit{presentation}.
	


\subsection{Srovnávací tabulka}
\begin{center}
\begin{table}[hpt]
\caption{Porovnání architektur}
\label{tab_porovnani}
\begin{tabular}{l|c|c}
 & MVC & PAC \\
\hline
Škálovatelnost & Špatná & Výborná\\
\hline
Rozšiřitelnost & Špatná & Dobrá\\
\hline
Portabilita & Dobrá & Dobrá\\
\hline
Low Coupling & Horší & Lepší\\
\hline
High Cohesion & Horší & Lepší\\
\hline
Možnost budování hierarchické struktury & Ne & Ano\\
\hline
\end{tabular}
\end{table}
\end{center}


\section{Závěr}
Obě architektury, které jsme pro implementaci našeho jednoduchého projektu použili, byly navrženy pro rozsáhlé projekty. My jsme jejich principy a struktury aplikovali na krátkém příkladu, kdy mohly některé věci být trochu vykonstruované, ale přesto byly funkční. Přestože byl náš projekt zjednodušený pouze na několik funkcí, měli jsme možnost si na něm architektury dobře vyzkoušet a pochopit jejich přínos pro přehlednost, strukturu či případné rozšiřování.

% An example of a floating figure using the graphicx package.
% Note that \label must occur AFTER (or within) \caption.
% For figures, \caption should occur after the \includegraphics.
% Note that IEEEtran v1.7 and later has special internal code that
% is designed to preserve the operation of \label within \caption
% even when the captionsoff option is in effect. However, because
% of issues like this, it may be the safest practice to put all your
% \label just after \caption rather than within \caption{}.
%
% Reminder: the "draftcls" or "draftclsnofoot", not "draft", class
% option should be used if it is desired that the figures are to be
% displayed while in draft mode.
%
%\begin{figure}[!t]
%\centering
%\includegraphics[width=2.5in]{myfigure}
% where an .eps filename suffix will be assumed under latex, 
% and a .pdf suffix will be assumed for pdflatex; or what has been declared
% via \DeclareGraphicsExtensions.
%\caption{Simulation Results}
%\label{fig_sim}
%\end{figure}

% Note that IEEE typically puts floats only at the top, even when this
% results in a large percentage of a column being occupied by floats.


% An example of a double column floating figure using two subfigures.
% (The subfig.sty package must be loaded for this to work.)
% The subfigure \label commands are set within each subfloat command, the
% \label for the overall figure must come after \caption.
% \hfil must be used as a separator to get equal spacing.
% The subfigure.sty package works much the same way, except \subfigure is
% used instead of \subfloat.
%
%\begin{figure*}[!t]
%\centerline{\subfloat[Case I]\includegraphics[width=2.5in]{subfigcase1}%
%\label{fig_first_case}}
%\hfil
%\subfloat[Case II]{\includegraphics[width=2.5in]{subfigcase2}%
%\label{fig_second_case}}}
%\caption{Simulation results}
%\label{fig_sim}
%\end{figure*}
%
% Note that often IEEE papers with subfigures do not employ subfigure
% captions (using the optional argument to \subfloat), but instead will
% reference/describe all of them (a), (b), etc., within the main caption.


% An example of a floating table. Note that, for IEEE style tables, the 
% \caption command should come BEFORE the table. Table text will default to
% \footnotesize as IEEE normally uses this smaller font for tables.
% The \label must come after \caption as always.
%
%\begin{table}[!t]
%% increase table row spacing, adjust to taste
%\renewcommand{\arraystretch}{1.3}
% if using array.sty, it might be a good idea to tweak the value of
% \extrarowheight as needed to properly center the text within the cells
%\caption{An Example of a Table}
%\label{table_example}
%\centering
%% Some packages, such as MDW tools, offer better commands for making tables
%% than the plain LaTeX2e tabular which is used here.
%\begin{tabular}{|c||c|}
%\hline
%One & Two\\
%\hline
%Three & Four\\
%\hline
%\end{tabular}
%\end{table}


% Note that IEEE does not put floats in the very first column - or typically
% anywhere on the first page for that matter. Also, in-text middle ("here")
% positioning is not used. Most IEEE journals/conferences use top floats
% exclusively. Note that, LaTeX2e, unlike IEEE journals/conferences, places
% footnotes above bottom floats. This can be corrected via the \fnbelowfloat
% command of the stfloats package.





% conference papers do not normally have an appendix





% trigger a \newpage just before the given reference
% number - used to balance the columns on the last page
% adjust value as needed - may need to be readjusted if
% the document is modified later
%\IEEEtriggeratref{8}
% The "triggered" command can be changed if desired:
%\IEEEtriggercmd{\enlargethispage{-5in}}

% references section

% can use a bibliography generated by BibTeX as a .bbl file
% BibTeX documentation can be easily obtained at:
% http://www.ctan.org/tex-archive/biblio/bibtex/contrib/doc/
% The IEEEtran BibTeX style support page is at:
% http://www.michaelshell.org/tex/ieeetran/bibtex/
%\bibliographystyle{IEEEtran}
% argument is your BibTeX string definitions and bibliography database(s)
%\bibliography{IEEEabrv,../bib/paper}
%
% <OR> manually copy in the resultant .bbl file
% set second argument of \begin to the number of references
% (used to reserve space for the reference number labels box)
\begin{thebibliography}{1}

\bibitem{fowler}
Fowler, M. et al., \emph{Patterns of Enterprise Application Architecture}. Addison Wesley, November 2002.
\bibitem{buschmann}
Buschmann, F. et al., \emph{Pattern-Oriented Software Architecture, A System of Patterns}. Vol.1, John Wiley \& Sons, 2001, s. 125-168.
\bibitem{wiki_pac}
Wikipedia, \emph{Presentation-abstraction-control}. http://en.wikipedia.org/wiki/Presentation-abstraction-control, November 2010.
\bibitem{wiki_mvc}
Wikipedia, \emph{Model–View–Controller}. \\
http://en.wikipedia.org/wiki/Model–view–controller, November 2010.

\end{thebibliography}


\end{document}


